﻿using System;

namespace Multiprocessing.Core.Mathematics.Matrices
{
    public interface IMatrix : ICloneable
    {
        int ColumnCount { get; }
        int RowCount { get; }
        
        double this[int row, int column] { get; set; }
        double GetElement(int row, int column);
        void SetElement(int row, int column, double value);

        void Inverse();
        IMatrixPart GetRow(int index);
        IMatrixPart GetColumn(int index);
        IMatrix Add(IMatrix matrix);
        IMatrix Substract(IMatrix matrix);
        IMatrix Multiply(IMatrix matrix);
//        IMatrix Multiply(IVector vector);
        IMatrix Multiply(double value);
        IMatrix Divide(double value);
        RowCollection Rows { get; }
        ColumnCollection Columns { get; }
    }
}
